package com.ruoyi.project.digital.service.impl;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.common.utils.DateUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.project.digital.domain.Mood;
import com.ruoyi.project.digital.domain.TUser;
import com.ruoyi.project.digital.service.IMoodService;
import com.ruoyi.project.digital.service.ITUserService;
import com.ruoyi.project.digital.service.IUserPetService;
import com.ruoyi.project.digital.util.gpt.GptUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.project.digital.mapper.PhrasesMapper;
import com.ruoyi.project.digital.domain.Phrases;
import com.ruoyi.project.digital.service.IPhrasesService;

/**
 * 用户常用语（chatGPT对接数据库）Service业务层处理
 *
 * @author ruoyi
 * @date 2023-12-03
 */
@Service
public class PhrasesServiceImpl extends ServiceImpl<PhrasesMapper, Phrases> implements IPhrasesService {

    @Autowired
    private IUserPetService petService;
    @Autowired
    private ITUserService userService;
    @Autowired
    private IMoodService moodService;

    /**
     * 查询用户常用语（chatGPT对接数据库）
     *
     * @param id 用户常用语（chatGPT对接数据库）ID
     * @return 用户常用语（chatGPT对接数据库）
     */
    @Override
    public Phrases selectPhrasesById(Long id) {
        return baseMapper.selectPhrasesById(id);
    }

    /**
     * 查询用户常用语（chatGPT对接数据库）列表
     *
     * @param phrases 用户常用语（chatGPT对接数据库）
     * @return 用户常用语（chatGPT对接数据库）
     */
    @Override
    public List<Phrases> selectPhrasesList(Phrases phrases) {
        return baseMapper.selectPhrasesList(phrases);
    }

    /**
     * 新增用户常用语（chatGPT对接数据库）
     *
     * @param phrases 用户常用语（chatGPT对接数据库）
     * @return 结果
     */
    @Override
    public int insertPhrases(Phrases phrases) {
        phrases.setCreateTime(DateUtils.getNowDate());
        return baseMapper.insertPhrases(phrases);
    }

    /**
     * 修改用户常用语（chatGPT对接数据库）
     *
     * @param phrases 用户常用语（chatGPT对接数据库）
     * @return 结果
     */
    @Override
    public int updatePhrases(Phrases phrases) {
        return baseMapper.updatePhrases(phrases);
    }

    /**
     * 批量删除用户常用语（chatGPT对接数据库）
     *
     * @param ids 需要删除的用户常用语（chatGPT对接数据库）ID
     * @return 结果
     */
    @Override
    public int deletePhrasesByIds(Long[] ids) {
        return baseMapper.deletePhrasesByIds(ids);
    }

    /**
     * 删除用户常用语（chatGPT对接数据库）信息
     *
     * @param id 用户常用语（chatGPT对接数据库）ID
     * @return 结果
     */
    @Override
    public int deletePhrasesById(Long id) {
        return baseMapper.deletePhrasesById(id);
    }

    @Override
    public List<Phrases> selectFrontList(Long userId) {
        List<Phrases> gtpList = getChatGPt(userId);
        if (ObjectUtil.isNotEmpty(gtpList)) {
            saveBatch(gtpList);//保存数据，用于日后的分析
            return gtpList;
        }
        QueryWrapper<Phrases> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("user_id", userId);
        petService.list();
        List<Phrases> phrasesList = list(queryWrapper);
        return phrasesList;
    }

    /**
     * chatGPT获取结果
     *
     * @param userId
     * @return
     */
    private List<Phrases> getChatGPt(Long userId) {
        List<Phrases> result = new ArrayList<>();//返回结果
        String moodName = getMoodName(userId);//获取当前信息的名称

        try {
            String gptList = GptUtils.submit("今天的心情" + moodName + "帮我生成几条聊天问候语，每条不超过6个字");//获取gpt的内容
            coverResult(gptList, result, userId);//转化结果
        } catch (IOException e) {
            e.printStackTrace();
        }

        return result;
    }

    /**
     * 转化gpt的结果
     *
     * @param gptList
     * @param result
     */
    private void coverResult(String gptList, List<Phrases> result, Long userId) {
        if (ObjectUtil.isNotNull(gptList)) {
            String[] list = gptList.split("\\d+");
            if (ObjectUtil.isNotNull(list)) {
                for (String ss : list) {
                    if (!ss.equals("") && ss.length() >= 3) {
                        ss = ss.substring(1).trim();
                        Phrases phrases = new Phrases();
                        phrases.setUserId(userId);
                        phrases.setName(ss);
                        result.add(phrases);

                    }
                }

            }
        } else {
            Phrases phrases = new Phrases();
            phrases.setUserId(userId);
            phrases.setName("今天AI在休息稍等再来吧！");
            result.add(phrases);
        }
    }

    /**
     * 获取当前用户的当前心情
     *
     * @param userId
     * @return
     */
    private String getMoodName(Long userId) {

        TUser user = userService.getById(userId);
        Long moodId = user.getMoodId();
        Mood mood = moodService.getById(moodId);
        String name = mood.getName().replaceAll("\"", "");
        return name;
    }
}
